CC = g++
CFLAGS = -Wall -Wno-comment -std=c++0x -Iinclude
LDFLAGS = -lglut -lGLEW -lGL

OBJS = \
    objLoader.o \
    obj_parser.o \
    list.o \
    Debug.o \
    Program.o \
    Shader.o \
    Object.o \
    Model.o \
    Context.o \
    Player.o \
    Scene.o \
    Material.o \
    UserInterface.o \
    Transform.o \
    Camera.o \
    Skybox.o \
    Timer.o \
    Main.o \
    Terrain.o \
    Segway.o \
    Equipment.o \
    Enemy.o \
    Water.o \
    Fire.o \
    
    
HEADERS = \
    src/objLoader.h \
    src/obj_parser.h \
    src/list.h \
    src/Debug.hpp \
    src/Program.hpp \
    src/Shader.hpp \
    src/Object.hpp\
    src/Model.hpp \
    src/Context.hpp \
    src/Player.hpp \
    src/Scene.hpp \
    src/Common.hpp \
    src/Material.hpp \
    src/UserInterface.hpp \
    src/Transform.hpp \
    src/Camera.hpp \
    src/Skybox.hpp \
    src/Timer.hpp \
    src/Terrain.hpp \
    src/Segway.hpp \
    src/Equipment.hpp \
    src/Enemy.hpp \
    src/Water.hpp \
    src/Fire.hpp \
    
TARGET = run

.PHONY: all clean

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $(TARGET) *.o $(LDFLAGS)

Camera.o: src/Camera.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Camera.cpp

Context.o: src/Context.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Context.cpp

Debug.o: src/Debug.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Debug.cpp

list.o: src/list.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/list.cpp

Main.o: src/Main.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Main.cpp

Material.o: src/Material.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Material.cpp

Model.o: src/Model.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Model.cpp

Object.o: src/Object.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Object.cpp

objLoader.o: src/objLoader.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/objLoader.cpp

obj_parser.o: src/obj_parser.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/obj_parser.cpp

Player.o: src/Player.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Player.cpp
	
Segway.o: src/Segway.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Segway.cpp

Program.o: src/Program.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Program.cpp

Scene.o: src/Scene.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Scene.cpp

Shader.o: src/Shader.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Shader.cpp

Skybox.o: src/Skybox.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Skybox.cpp
	
Fire.o: src/Fire.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Fire.cpp
	
Water.o: src/Water.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Water.cpp

Terrain.o: src/Terrain.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Terrain.cpp

#TerrainGenerator.o: src/TerrainGenerator.cpp $(HEADERS)
#	$(CC) $(CFLAGS) -c src/TerrainGenerator.cpp

UserInterface.o: src/UserInterface.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/UserInterface.cpp

Transform.o: src/Transform.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Transform.cpp

Timer.o: src/Timer.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Timer.cpp

Equipment.o: src/Equipment.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Equipment.cpp

Enemy.o: src/Enemy.cpp $(HEADERS)
	$(CC) $(CFLAGS) -c src/Enemy.cpp

clean:
	rm -f *.o $(TARGET)
